package cn.cxq.learning.math;

import org.junit.jupiter.api.Test;

/**
 * 剑指offer
 * 不用加减乘除做加法
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：254292
 * 本题知识点： 数学
 * 算法知识视频讲解
 * 题目描述
 * 写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号。
 * 示例1
 * 输入
 * 复制
 * 1,2
 * 返回值
 * 复制
 * 3
 */
public class NoCrossAdd {

    @Test
    public void test() {
        System.out.println(Add(1, 3));
    }

    public int Add(int num1, int num2) {
        while (num2!=0) {
            int temp = num1 ^ num2; //求出所有的非进位
            num2 = (num1 & num2) << 1; //求出所有的进位
            num1 = temp;
        }
        return num1;
    }

    @Test
    public void testAnd() {
        System.out.println((1 & 1) << 1);
    }
}
